package com.yubest;

/**
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 *
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 *
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 *  
 *
 * 示例 1：
 *
 * 输入：x = 123
 * 输出：321
 * 示例 2：
 *
 * 输入：x = -123
 * 输出：-321
 * 示例 3：
 *
 * 输入：x = 120
 * 输出：21
 * 示例 4：
 *
 * 输入：x = 0
 * 输出：0
 *  
 *
 * 提示：
 *
 * -2^31 <= x <= 2^31 - 1
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-integer
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @Author hweiyu
 * @Description
 * @Date 2021/10/20 10:26
 */
public class P0007 {

    public static void main(String[] args) {
        System.out.println(new Solution7().reverse(123));

        System.out.println(new Solution7().reverse(-123));

        System.out.println(new Solution7().reverse(120));

        System.out.println(new Solution7().reverse(1534236469));
    }
}

class Solution7 {

    public int reverse(int x) {
        boolean isPositive = x >= 0;
        x = Math.abs(x);
        int len = String.valueOf(x).length();
        long r = 0;
        while (x > 0) {
            r += x % 10 * Math.pow(10, --len);
            x = x / 10;
        }
        if (r > Integer.MAX_VALUE || r < Integer.MIN_VALUE) {
            return 0;
        } else {
            return isPositive ? (int) r : (int) -r;
        }
    }
}
